package com.jmb.apiplatform.service.impl;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.jmb.apiplatform.common.PageResult;
import com.jmb.apiplatform.mapper.ApiTestCaseExecuteLogMapper;
import com.jmb.apiplatform.pojo.ApiTestCaseExecuteLog;
import com.jmb.apiplatform.pojo.ApiTestCaseExecuteLogListTO;
import com.jmb.apiplatform.pojo.ApiTestCaseExecuteLogListVO;
import com.jmb.apiplatform.pojo.ApiTestCaseExecuteLogVO;
import com.jmb.apiplatform.service.ApiTestCaseExecuteLogService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
* @author jinmengbo
* @description 针对表【api_test_case_execute_log】的数据库操作Service实现
* @createDate 2025-02-15 15:23:30
*/
@Service
public class ApiTestCaseExecuteLogServiceImpl implements ApiTestCaseExecuteLogService{
    @Autowired
    private ApiTestCaseExecuteLogMapper apiTestCaseExecuteLogMapper;


    /**
     * 保存执行日志
     * @param executeLogDO 日志对象
     * @return 执行日志对象
     */
    @Override
    public ApiTestCaseExecuteLog saveExecuteLog(ApiTestCaseExecuteLog executeLogDO) {
        apiTestCaseExecuteLogMapper.insertExecuteLog(executeLogDO);
        return executeLogDO;
    }

    /**
     * 执行日志列表
     * @param executeLogListTO 执行日志列表
     * @return 分页的数据
     */
    @Override
    public PageResult<ApiTestCaseExecuteLogListVO> findExecuteList(ApiTestCaseExecuteLogListTO executeLogListTO) {
        PageHelper.startPage(executeLogListTO.getPageNum(), executeLogListTO.getPageSize());
        List<ApiTestCaseExecuteLogListVO> pageList = apiTestCaseExecuteLogMapper.selectExecuteList(executeLogListTO);
        Page<ApiTestCaseExecuteLogListVO> page= (Page<ApiTestCaseExecuteLogListVO>)pageList;
        return new PageResult<>(page.getTotal(), page.getResult());
    }

    /**
     * 查询执行日志,包含请求信息和断言信息列表
     * @param executeId 执行编号
     * @return 执行日志
     */
    @Override
    public ApiTestCaseExecuteLogVO findExecute(Integer executeId) {
        return apiTestCaseExecuteLogMapper.selectExecute(executeId);
    }

    /**
     * 修改执行日志，主要用来根据断言执行状态来再次修改执行状态
     * @param executeLog 执行日志
     */
    @Override
    public void modifyExecuteLog(ApiTestCaseExecuteLog executeLog) {
        apiTestCaseExecuteLogMapper.updateExecuteLog(executeLog);
    }

    /**
     * 获取用例执行调用链
     * @param executeId 执行编号
     */
    @Override
    public JSONArray caseExecuteLogChain(Integer executeId) {
        ApiTestCaseExecuteLogVO executeVO = this.findExecute(executeId);
        String chain = executeVO.getChain();
        return JSON.parseArray(chain);
    }

    /**
     * 查看所有执行日志列表，不分页
     * @param executeLogListDTO 执行日志
     * @return 返回不分页数据
     */
    @Override
    public List<ApiTestCaseExecuteLogListVO> findExecuteListAll(ApiTestCaseExecuteLogListTO executeLogListDTO) {
        return apiTestCaseExecuteLogMapper.selectExecuteList(executeLogListDTO);
    }
}




